package cycling.taxi.com.manager;

import android.support.v4.app.Fragment;

import java.util.HashMap;
import java.util.Map;

import cycling.taxi.com.ui.fragment.AutofixFrgt;
import cycling.taxi.com.ui.fragment.FixFrgt;
import cycling.taxi.com.ui.fragment.RepairFrgt;
import cycling.taxi.com.ui.fragment.TipsFrgt;
import cycling.taxi.com.ui.fragment.WebsiteFrgt;

/**
 * 把管理类做成单例的，
 * 把管理类中的每一个Fragment 做成单个的
 *
 * 1.创建类的私有化静态对象
 * 2.私有化一个构造函数
 * 3.提供一个静态获取的方法，如果对象为null，就给它new一个
 *      两个private
 *      两个static
 * Created by sixsix on 16/8/25.
 */
public class FragmentFactory {
    private  static FragmentFactory sInstance;

    private FragmentFactory(){}

    public static FragmentFactory getInstance(){
        if(sInstance == null){
            sInstance = new FragmentFactory();
        }
        return sInstance;
    }

    // 创建一个map集合，保存position对应的 Fragment，作为缓存复用
    private  static Map<Integer,Fragment> mFragments =  new HashMap<>();

    // 提供获取fragment，根据position 返回Fragment
    // 问题，Fragment 在保存的时候，错误的页面为什么没有保存
    public Fragment getFragment(int position){
        // 如果之前集合中保存了当前 position 的Fragment，就直接返回
         if(mFragments.get(position)!= null){
             System.out.println("使用Fragment缓存");
            return mFragments.get(position);
         }
        Fragment fragment;
        switch (position){
            case 0:
                fragment = new TipsFrgt();
                break;
            case 1:
                fragment = new FixFrgt();
                break;
            case 2:
                fragment =new RepairFrgt();
                break;
            default:
                fragment = new AutofixFrgt();
                break;
        }
        System.out.println("创建Fragment缓存");
        mFragments.put(position,fragment);
        // Log.e(getClass().getSimpleName(),"在MAP保存了fragment");
        return fragment;
    }
}
